package main

import (
	"fmt"
	"time"

	_ "github.com/go-sql-driver/mysql"

	"github.com/jinzhu/gorm"
)

type Users struct {
	// 将Model结构体引入到User中，获取ID和各时间相关字段
	gorm.Model
	UserId      int64     `gorm:"column:userId;index;not null"`
	Birthday    time.Time `gorm:"column:birthday"`
	Age         int       `gorm:"cloumn:age;default:18"`
	Name        string    `gorm:"column:name;index:idx_name_add_id"`
	Num         int       `gorm:"column:num;AUTO_INCREMRNT"`
	Email       string    `gorm:"column:email;type:varchar(100);unique_index"`
	Address     string    `gorm:"column:address"`
	Description string    `gorm:"column:description;size:255;comment:'学生';"`
	Grade       string    `gorm:"column:grade;type:enum('0','1','2','3');default:'1';comment:'0：优秀，1：良好，2：中等，3：不及格';"`
}

// 定义了一个Model的结构体
type Model struct {
	ID        uint      `gorm:"column:id;primary_key;AUTO_INCREMRNT"` //primary_key:设置主键
	CreatedAt time.Time `gorm:"column:create_at;default:current_timestamp()"`
	UpdatedAt time.Time `gorm:"column:update_at"`
	DeletedAt time.Time `gorm:"column:delete_at"`
}

//设置表名方法，不创建该方法默认是结构体的名的复数形式
func (Users) TableName() string {
	return "user"
}

func main() {
	// 定义表名
	// var tableName string = "user"
	db, err := gorm.Open("mysql", "root:root@/gormdemo?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		fmt.Println("连接数据库失败")
	}
	defer db.Close()

	// db.CreateTable(&User{})
	// 判断是否存在
	if db.HasTable(&Users{}) {
		// 自动适配该结构体，判断是否存在该表，
		// 存在则适配，即原先没有该字段则新增该字段
		db.AutoMigrate(&Users{})
	} else {
		// 否则就创建该表
		db.CreateTable(&Users{})
	}
}
